package AppletInterface;

import BaseClasses.DataInterface;
import SnmpAll.SnmpFetcher;
import java.util.ArrayList;
import java.util.Vector;
import javax.swing.table.AbstractTableModel;

/**
 * Classe para redefinir o AbstractTableModel. Necessário para interagir com o SNMP Fetcher
 * 
 */
public class ModeloTable extends AbstractTableModel {

    Vector linhas = new Vector();
    Vector colunas = new Vector();
    SnmpFetcher sft;

    /**
     * Construtor
     * 
     * @param sft instancia do SNMP fetcher
     * @throws InterruptedException
     */
    public ModeloTable(SnmpFetcher sft) throws InterruptedException {
        this.sft = sft;
        carregar_dados(sft);
    }

    /**
     * Vai buscar os dados ao snmp fetcher e adiciona-os às linhas e colunas
     * 
     * @param sft instancia do snmp fetcher
     * @throws InterruptedException
     */
    public void carregar_dados(SnmpFetcher sft) throws InterruptedException {
        if (sft != null) {
            //adicionar o cabeçalho
            colunas.add("Intf/Type");
            colunas.add("Nominal BW");
            colunas.add("State");
            colunas.add("Bit Rate INPUT");
            colunas.add("Bit Rate OUTPUT");
            colunas.add("%BW M INPUT");
            colunas.add("%BW M OUTPUT");
            colunas.add("%BW H INPUT");
            colunas.add("%BW H OUTPUT");

            ArrayList<DataInterface> aldi = sft.getSData().getArrayListInterfacesClone();
            //adicionar uma linha por cada interface com novos dados
            for (int i = 0; i < aldi.size(); i++) {

                DataInterface dt = aldi.get(i);
                Vector linha = new Vector();

                linha.add(dt.getNome());
                linha.add(dt.getLarguraBandaNominal() + " Mbps");
                linha.add(dt.getEstado());
                linha.add(dt.getTaxaBitsIntantaneaInput() + " bps");
                linha.add(dt.getTaxaBitsIntantaneaOutput() + " bps");
                linha.add(dt.percentagemUltimoMinutoInput());
                linha.add(dt.percentagemUltimoMinutoOutput());
                linha.add(dt.percentagemUltimaHoraInput());
                linha.add(dt.percentagemUltimaHoraOutput());

                linhas.add(linha);


            }
            fireTableDataChanged();
        }
    }

    @Override
    public String getColumnName(int c) {
        return (String) colunas.elementAt(c);
    }

    @Override
    public int getColumnCount() {
        return colunas.size();
    }

    @Override
    public int getRowCount() {
        return linhas.size();
    }

    @Override
    public void setValueAt(Object valor, int linha, int col) {
        Vector v = (Vector) linhas.elementAt(linha);
        v.set(col, valor);
        fireTableDataChanged();
    }

    @Override
    public Object getValueAt(int linha, int col) {
        Vector v = (Vector) linhas.elementAt(linha);
        return v.elementAt(col);
    }

    @Override
    public boolean isCellEditable(int linha, int col) {
        return false;
    }

    /**
     * 
     * @param linha
     */
    public void eliminar(int linha) {
        linhas.remove(linha);
        this.fireTableRowsDeleted(linha, linha);
    }
}
